/*
 * LogUtil.java
 * Created on 15/04/2008
 * 
 */

package es.team.util;

import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;

/**
 * Clase con utilidades varias de Loggero
 * @author Victor Gimeno (SGV, SL)
 */
public final class LogUtil {
    
    /** Constructor por defecto de la clase */
    private LogUtil() {
    }
    
    
    private static void summaryLog( Logger logger, String what ){
        
       Logger summary = Logger.getLogger( logger.getName() + Constants.SUMMARY_PREFIX );
       
       if( summary != null ){
           
           summary.error(what);   
       }
    }
    
    private static void logRequestData( Logger logger, HttpServletRequest request ){
        
        if( request != null ){
            logger.error("host remoto: "+request.getRemoteHost());
            logger.error("direccion ip: "+request.getRemoteAddr());
            logger.error("URI: "+request.getRequestURI());
            logger.error("servidor: "+request.getServerName()+":"+request.getServerPort());
            logger.error("Navegador usado: "+request.getHeader("USER-AGENT"));
        }else{
            logger.error("## Error sin cabecera de INFO ##");
        }
    }
    
    public static void logControl(Logger logger, String what, Throwable traza ){
        
        if( what != null)
            logger.info( what );
       
        if( traza != null )
            logger.error("TRAZA ERROR: "+traza.getMessage(), traza );
       
    }
    
    public static void logInfo(Logger logger, HttpServletRequest request, String where, Object bean){
        
       logger.info("#################### START INFO #############################################");
          
       logger.info("INFO: "+where );
       
       if( bean != null )
            logger.error( bean.toString() );
            //bean.toLog(logger);
       
       logger.info("##################### END INFO ##############################################");
       
       summaryLog( logger, where );
       
    }
    
    /**
    * Metodo para loggear datos informativos de la aplicaci�n al producirse una exception en grabaci�n.
    * @param logger Instancia del logger a usar
    * @param request Objeto de la peticion, para sacar datos interesantes
    * @param where Cadena que identifica donde se produjo el error
    * @param traza Objeto arrojado por la exception.
    * @param bean DTO usado en el paso de parametros a la funcion de bbdd
    */
   public static void logError(Logger logger, HttpServletRequest request, String where, Throwable traza, Object bean){
       
       String summaryMsg = "Error";
       
       logger.error("#################### START ERROR #############################################");
       
       logRequestData( logger, request );
       
       if( traza != null ){
           
            logger.error("error: "+where+"; "+traza.getMessage());
       
            logger.error("traza error ",traza);
            summaryMsg = where + traza.getMessage();
            
       }else{
           
            logger.error("error: "+where );
       
            summaryMsg = where;
       }
       
       if( bean != null )
            logger.error(bean.toString());
       
       logger.error("##################### END ERROR ##############################################");
       
       summaryLog( logger, summaryMsg );
   }
   
   /**
    * Metodo para loggear datos informativos de la aplicaci�n al producirse una exception.
    * @param logger Instancia del logger a usar
    * @param request Objeto de la peticion, para sacar datos interesantes
    * @param where Cadena que identifica donde se produjo el error
    * @param traza Objeto arrojado por la exception.
    */
   public static void logError(Logger logger, HttpServletRequest request, String where, Throwable traza){
       
       logError(logger, request, where, traza, null);
   }
   
   /**
    * Metodo para loggear datos informativos de la aplicaci�n.
    * @param logger Instancia del logger a usar
    * @param request Objeto de la peticion, para sacar datos interesantes
    * @param where Cadena que identifica donde se produjo el error
    */
   public static void logError(Logger logger, HttpServletRequest request, String where){
       
       logError(logger, request, where, null, null);
   }
   
   /**
    * Metodo para loggear datos informativos de la aplicaci�n.
    * @param logger Instancia del logger a usar
    * @param where Cadena que identifica donde se produjo el error
    */
   public static void logError(Logger logger, String where){
       
       logError(logger, null, where, null, null);
   }
   
   /**
    * Metodo para loggear datos informativos de la aplicaci�n al producirse una exception.
    * @param logger Instancia del logger a usar
    * @param where Cadena que identifica donde se produjo el error
    * @param traza Objeto arrojado por la exception.
    */
   public static void logError(Logger logger, String where, Throwable traza){
       
       logError(logger, null, where, traza, null);
   }
   
   /**
    * Metodo para loggear datos informativos de la aplicaci�n al producirse una exception.
    * @param logger Instancia del logger a usar
    * @param where Cadena que identifica donde se produjo el error
    * @param bean DTO usado en el paso de parametros a la funcion de bbdd
    */
   public static void logError(Logger logger, String where, Object bean){
       
       logError(logger, null, where, null, bean);
   }
   
   /**
    * Metodo para loggear datos informativos de la aplicaci�n al producirse una exception.
    * @param logger Instancia del logger a usar
    * @param where Cadena que identifica donde se produjo el error
    * @param traza Objeto arrojado por la exception.
    * @param bean DTO usado en el paso de parametros a la funcion de bbdd
    */
   public static void logError(Logger logger, String where, Throwable traza, Object bean){
       
       logError(logger, null, where, traza, bean);
   }
   
   /**
    * Metodo para loggear datos informativos de la aplicaci�n.
    * @param logger Instancia del logger a usar
    * @param request Objeto de la peticion, para sacar datos interesantes
    * @param where Cadena que identifica donde se produjo el error
    * @param bean DTO usado en el paso de parametros a la funcion de bbdd
    */
   public static void logError(Logger logger, HttpServletRequest request, String where, Object bean){
       
       logError(logger, request, where, null, bean);
   }
   
}
